﻿using Autofac;
using Autofac.Extras.DynamicProxy;
using System.Reflection;
using WebApi.Core.Common.HttpContextUser;

namespace WebApi.Core.Api.SetUpService
{
    /// <summary>
    /// Autofac注册服务类
    /// </summary>
    public class AutofacModuleRegister:Autofac.Module
    {
        /// <summary>
        /// 重写Load函数
        /// </summary>
        /// <param name="builder"></param>
        protected override void Load(ContainerBuilder builder)
        { 
            // 注册 Service
            var assemblysServices = Assembly.Load("Webapi.Core.Service");
            builder.RegisterAssemblyTypes(assemblysServices)
                .InstancePerDependency()//默认模式，每次调用，都会重新实例化对象；每次请求都创建一个新的对象
                .AsImplementedInterfaces()//是以接口方式进行注入,注入这些类的所有的公共接口作为服务（除了释放资源）
                .EnableInterfaceInterceptors();//引用Autofac.Extras.DynamicProxy;应用拦截器

            //注册 Repository
            var assemblysRepository = Assembly.Load("Webapi.Core.Repository");
            builder.RegisterAssemblyTypes(assemblysRepository)
                .InstancePerDependency() // 默认模式，每次调用，都会重新实例化对象；每次请求都创建一个新的对象
                .AsImplementedInterfaces()//是以接口方式进行注入,注入这些类的所有的公共接口作为服务（除了释放资源）
                .EnableInterfaceInterceptors();//引用Autofac.Extras.DynamicProxy;应用拦截器

            builder.RegisterType<AspNetUser>().As<IUser>().AsImplementedInterfaces().InstancePerLifetimeScope().PropertiesAutowired(); 
        }
    }
}
